# http协议 -- 超文本传输协议
    # GET -- 查
    # POST -- 新增
    # PUT -- 修改
    # DELETE -- 删除
    # OPTIONS --查看url支持哪些方法
    # HEAD -- 请求头部信息

# /etc/resolv
# http版本
# web应用

# 如何生成html，如何接收http请求，解析http请求，发送http响应？
# 底层的代码专门有服务器软件实现，我们只需要专注生成html文档。只需要专注业务逻辑

# wsgi服务器 -- python web服务器
# wsgi -- python web server gateway interface
# 是python语言定义的web服务器和web应用程序或框架之间一种简单而通用的接口规范

# python    flask
# flask                         django
# 轻、微框架                         重
# 自由、灵活、可扩展性强           灵活度不够

# flask是基于Werkzeug WSGI工具箱和jinja2模板引擎开发出来的框架

# 虚拟环境里
# 做到项目环境隔离


"""
gunicorn 使用
1、安装  虚拟环境下
pip install gunicorn
2、编辑你的代码文件 flask-test.py
from flask import Flask
app = Flask(__name__)

@app.route("/index")
def hello():
    return "hello world"
3、命令行运行gunicorn服务
gunicorn -w 4 flask-test:app
4、测试
在别的窗口运行 curl "http://127.0.0.1:8000/index"
对app.run()运行和 gunicorn运行做了压力测试
安装ab压力测试工具
yum install httpd-tools
使用ab工具，压测500的并发
ab -n 500 -c 500  http://127.0.0.1:8000/index
"""

'''
from flask import Flask, url_for
# Flask实例化生成核心对象app
# 后续所有的东西都要和app绑定
app = Flask(__name__)
# 参数传递 当前的模块名

# 路由和视图函数绑定
@app.route("/index", methods=['POST','GET'])
def hello():
    return "hello world"

# @app.route("/")
def root():
    return "this is /"

app.add_url_rule("/", view_func=root)

# 路由绑定  通过两张表进行的 url_map    view_functions
# url_map：保存的是url和endpoint和映射关系
# view_functions：保存的是endpoint和function的映射关系

# 接收到请求后，先解析http头部字段，拿到请求的url路径
# 在url_map表中查找请求的url路径，没有找到提示not found
# url_map找到对应的endpoint
# 然后通过endpoint在view_functions表里取找对应的function

# endpoint没有指定，默认以函数名为准

# 构造动态url -- 通过url路径来传递参数
# 请求路径：http://127.0.0.1:5000/sctl/gaoshuo/123456
# @app.route("/sctl/<name>/<int:age>")    #可以指定数据类型
# def sctl(name, age):     #设置响应的形参去接收传递过来的参数
#     print(url_for("hello"))     #查找endpoint为hello的url
#     return f"my name is {name}, my passwd is {age}"

@app.route("/sctl/<name>")
def sctl(name):     #设置响应的形参去接收传递过来的参数
    print(url_for("hello"))     #查找endpoint为hello的url
    return f"my name is {name}"

# 启动内置web服务
# 打开调试模式
app.debug = True    #修改代码自动重启，发生错误会展示详细信息
app.run(host='0.0.0.0', port=9000)   # 内置小型web服务器，知识和在开发环境使用，线上环境请使用gunicorn
'''
"""
## 接收客户端传递的参数
# 1、构造动态url
# 2、request对象 -- 客户端请求的所有信息全部都封装在一个对象中--request对象
# 常用属性
    url     记录请求的url地址
    method  记录请求中的http方法
    args    记录请求中的查询参数 -- 常常用在GET方法中  例：http://127.0.0.1:9000/login?name=sctl&passwd=123456     #url携带查询参数
    form    记录请求中的表单数据
    json    记录请求中传递的json格式数据    body携带
"""
'''
from flask import Flask, request
app = Flask(__name__)

@app.route("/login", methods=['POST'])
def login():
    print(dir(request))
    print(request.url)
    print(request.method)
    print(request.args)
    # print(request.args["name"])
    # # return "this is login"
    # # 服务器端需要什么key 客户端就要给什么
    # if request.args["name"] == "root" and request.args["passwd"] == "123456":        
    #     return "登录成功"
    # else:
    #     return "登录失败"

    # print(request.form['age'])

    print(request.json['information'])
    print(request.json['school'])
    return "this is login"


app.run(debug=True, host='0.0.0.0', port=9000)
'''

"""
立项 --》需求分析 --》原型设计 --》技术选型 --》写项目（数据库设计，接口设计） --》测试 --》上线

第一：所有的东西都要绑到核心对象上去
第二：从程序入口开始一步一步梳理项目（每一个文件都要运行到）


"""

